home *** CD-ROM | disk | FTP | other *** search
- #include "MyHeader.h"
-
-
- void WriteGlobe(void)
- {
-
- long lonBands = 20;
- long latBands = 10;
-
- long x, y;
-
- MyShape * shape;
-
- MyVector * p;
- MyTri * t;
-
- float cy, sy;
-
- short texture = 3;
-
- float u1, u2;
- float v1, v2;
- long p1, p2;
- long q1, q2;
-
- /////////
-
- shape = MyShapeNew();
- shape->pointCount = (latBands - 1) * lonBands + 2;
- shape->pointList = malloc(sizeof (MyVector) * shape->pointCount);
-
- shape->pointList[0].x = 0;
- shape->pointList[0].y = 1;
- shape->pointList[0].z = 0;
-
- shape->pointList[1].x = 0;
- shape->pointList[1].y = -1;
- shape->pointList[1].z = 0;
-
- p = &shape->pointList[2];
-
- for(y = 1; y < latBands; y++){
- cy = cos(pi * y / latBands);
- sy = sin(pi * y / latBands);
- for(x = 0; x < lonBands; x++){
- p->y = cy;
- p->x = sin(pi * 2 * x / lonBands) * sy;
- p->z = cos(pi * 2 * x / lonBands) * sy;
- p++;
- }
- }
-
- shape->triangleCount = (latBands - 1) * lonBands * 2;
- shape->triangleList = malloc(sizeof (MyTri) * shape->triangleCount);
- t = shape->triangleList;
- for(y = 0; y < latBands; y++){
- v1 = 1.0 - ((float)y) / latBands;
- v2 = 1.0 - ((float)y + 1) / latBands;
- for(x = 0; x < lonBands; x++){
- u1 = ((float)x) / lonBands;
- u2 = ((float)x + 1) / lonBands;
- p2 = 2 + x + y * lonBands;
- p1 = p2 - lonBands;
- q2 = 2 + ((x + 1) % lonBands) + y * lonBands;
- q1 = q2 - lonBands;
- if(y == 0){
- t->corner[0].pointNumber = 0;
- t->corner[0].u = u1;
- t->corner[0].v = 1;
-
- t->corner[1].pointNumber = q2;
- t->corner[1].u = u2;
- t->corner[1].v = v2;
-
- t->corner[2].pointNumber = p2;
- t->corner[2].u = u1;
- t->corner[2].v = v2;
-
- t->texture = texture;
-
- t++;
- } else if (y == latBands - 1){
- t->corner[0].pointNumber = 1;
- t->corner[0].u = u1;
- t->corner[0].v = 0;
-
- t->corner[1].pointNumber = p1;
- t->corner[1].u = u1;
- t->corner[1].v = v1;
-
- t->corner[2].pointNumber = q1;
- t->corner[2].u = u2;
- t->corner[2].v = v1;
-
- t->texture = texture;
-
- t++;
- } else {
- t->corner[0].pointNumber = p2;
- t->corner[0].u = u1;
- t->corner[0].v = v2;
-
- t->corner[1].pointNumber = p1;
- t->corner[1].u = u1;
- t->corner[1].v = v1;
-
- t->corner[2].pointNumber = q2;
- t->corner[2].u = u2;
- t->corner[2].v = v2;
-
- t->texture = texture;
-
- t++;
-
-
- t->corner[0].pointNumber = p1;
- t->corner[0].u = u1;
- t->corner[0].v = v1;
-
- t->corner[1].pointNumber = q1;
- t->corner[1].u = u2;
- t->corner[1].v = v1;
-
- t->corner[2].pointNumber = q2;
- t->corner[2].u = u2;
- t->corner[2].v = v2;
-
- t->texture = texture;
-
- t++;
- }
- }
- }
-
- MyShapeSave(shape, "globe");
-
- MyShapeDispose(shape);
- }
-
-
- void WriteCylinder(void)
- {
-
- long lonBands = 20;
-
- long x, c, pn;
-
- MyShape * shape;
-
- MyVector * p;
- MyVector * pp;
- MyTri * t;
-
- short texture = 4;
-
- float u1, u2;
- long p1, p2;
- long q1, q2;
-
- /////////
-
- shape = MyShapeNew();
- shape->pointCount = lonBands * 2;
- MYMALLOC(shape->pointList, shape->pointCount);
-
-
- p = shape->pointList;
- pp = p + lonBands;
-
- for(x = 0; x < lonBands; x++){
- p->y = 1;
- pp->y = -1;
- pp->x = p->x = sin(pi * 2 * x / lonBands);
- pp->z = p->z = cos(pi * 2 * x / lonBands);
- p++;
- pp++;
- }
-
- shape->triangleCount = lonBands * 4 - 4;
- MYMALLOC(shape->triangleList, shape->triangleCount);
-
- t = shape->triangleList;
- for(x = 0; x < lonBands; x++){
- u1 = 3.0 * ((float)x) / lonBands;
- u2 = 3.0 * ((float)x + 1) / lonBands;
- p1 = x;
- p2 = p1 + lonBands;
- q1 = (x + 1) % lonBands;
- q2 = q1 + lonBands;
-
- t->corner[0].pointNumber = p2;
- t->corner[0].u = u1;
- t->corner[0].v = 0;
-
- t->corner[1].pointNumber = p1;
- t->corner[1].u = u1;
- t->corner[1].v = 1;
-
- t->corner[2].pointNumber = q2;
- t->corner[2].u = u2;
- t->corner[2].v = 0;
-
- t->texture = texture;
-
- t++;
-
-
- t->corner[0].pointNumber = p1;
- t->corner[0].u = u1;
- t->corner[0].v = 1;
-
- t->corner[1].pointNumber = q1;
- t->corner[1].u = u2;
- t->corner[1].v = 1;
-
- t->corner[2].pointNumber = q2;
- t->corner[2].u = u2;
- t->corner[2].v = 0;
-
- t->texture = texture;
-
- t++;
- }
-
- for(x = 2; x < lonBands; x++){
- t->corner[0].pointNumber = lonBands;
- t->corner[1].pointNumber = lonBands + x - 1;
- t->corner[2].pointNumber = lonBands + x;
- for(c = 0; c < 3; c++){
- pn = t->corner[c].pointNumber;
- t->corner[c].u = shape->pointList[pn].x;
- t->corner[c].v = shape->pointList[pn].z;
- }
-
- t->texture = texture;
-
- t++;
- }
-
- for(x = 2; x < lonBands; x++){
- t->corner[0].pointNumber = 0;
- t->corner[1].pointNumber = x;
- t->corner[2].pointNumber = x - 1;
- for(c = 0; c < 3; c++){
- pn = t->corner[c].pointNumber;
- t->corner[c].u = -shape->pointList[pn].x;
- t->corner[c].v = shape->pointList[pn].z;
- }
-
- t->texture = texture;
-
- t++;
- }
-
- MyShapeSave(shape, "cylinder");
-
- MyShapeDispose(shape);
- }